package transform;

import graph.*;

/**
 * 
 * Any Transformer in this program must implement the interface Transformer
 *
 */

public interface Transformer {
	
	/**
	 * Sets the graph to transform
	 * 
	 * @param g The graph to transform
	 * @return true on success, false if the graph is invalid
	 *
	 */
	public boolean setGraph(Graph g);
	
	/**
	 * Runs the transform on the graph
	 * 
	 * @return true on completion, false on failure
	 */
	public boolean runTransform();
	
	/**
	 * Returns the result of the transformation
	 * 
	 * @return the graph after transformation or null if the transformation was a failure
	 */
	public Graph getGraph();
	
	/**
	 * Sets the counter-example
	 * 
	 * @param g the counter-example
	 * @return true on success, false if the graph is invalid
	 */
	public boolean setCounterExample(Graph g);
	
	/**
	 * Run the inverse transform on the counter-example
	 * @return true on success, false if the graph is invalid
	 */
	public boolean runInverseTransform();
	
	/**
	 * Returns the result of the inverse transformation
	 * 
	 * @return the graph after transformation or null if the transformation was a failure
	 */
	public Graph getInverseCounterExample();

}
